package com.mayikt;

/**
 * @Author: maplefire
 * @Description: 当有线程想要获取RealData的时候，程序会被阻塞。等到RealData被注入才会使用getRequest()方法。
 * @Date: 2022/09/03 17:15
 */

public class FutureData implements Data {

    private volatile RealData realData;

    private boolean flag = false;

    public synchronized void setRealData(RealData realData) {
        // 如果已经获取到结果，直接返回
        if (flag) {
            return;
        }
        // 如果flag为false，没有获取到数据，传递realData对象
        this.realData = realData;
        flag = true;
        notify();
    }


    public synchronized String getRequest() {
        while (!flag) {
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        return realData.getRequest();
    }
}
